﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.Reporting.WebForms;
using SIBI.Helpers;
using SIBI.Reports;
using SIBI.Models;

namespace SIBI.Reports.ConsultaBI
{
    /// <summary>
    /// Este reporte permite obtener los Bienes Informáticos desde la Vista: 
    /// SELECT dbo.BienInformatico.BienInformaticoId, dbo.BienInformatico.cubf, dbo.BienInformatico.nanf, dbo.BienInformatico.nena, dbo.BienInformatico.dfva, 
    ///                      dbo.BienInformatico.diga, dbo.BienInformatico.dfga, dbo.Estado.cnom, dbo.TipoBien.cnom AS Expr1, dbo.Sociedad.cscc, dbo.Division.cper, dbo.Cargo.empleados, 
    ///                      dbo.Marca.cnom AS Expr2, dbo.MarcaModelo.cmod, dbo.ClaseObjeto.cnom AS Expr3, dbo.BienInformatico.ceco_id, 
    ///                      TEJECUTIVO.dbo.LOCALIDAD.localidad_nombre
    ///        FROM dbo.BienInformatico INNER JOIN
    ///                      dbo.Cargo ON dbo.BienInformatico.CargoId = dbo.Cargo.CargoId INNER JOIN
    ///                      dbo.Division ON dbo.BienInformatico.DivisionId = dbo.Division.DivisionId INNER JOIN
    ///                      dbo.Estado ON dbo.BienInformatico.EstadoId = dbo.Estado.EstadoId INNER JOIN
    ///                      dbo.MarcaModelo ON dbo.BienInformatico.MarcaModeloId = dbo.MarcaModelo.MarcaModeloId INNER JOIN
    ///                      dbo.ClaseObjeto ON dbo.MarcaModelo.ClaseObjetoId = dbo.ClaseObjeto.ClaseObjetoId INNER JOIN
    ///                      dbo.Marca ON dbo.MarcaModelo.MarcaId = dbo.Marca.MarcaId INNER JOIN
    ///                      dbo.Sociedad ON dbo.BienInformatico.SociedadId = dbo.Sociedad.SociedadId INNER JOIN
    ///                      dbo.TipoBien ON dbo.BienInformatico.TipoBienId = dbo.TipoBien.TipoBienId INNER JOIN
    ///                      TEJECUTIVO.dbo.LOCALIDAD ON TEJECUTIVO.dbo.LOCALIDAD.localidad_id = dbo.BienInformatico.localidad_id
    /// </summary>
    public partial class Reporte : System.Web.UI.Page
    {
        private   int  nTop = 0;
        protected void Page_Load(object sender, EventArgs e)
        {

            if (!Page.IsPostBack)
            {
                this.Button1.OnClientClick = "return $('.cargador', parent.document).css('display', 'block').length>0;";
                nTop = 10;
                f_Reporte(true);
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            f_Reporte(false);
        }

        // definir Estructura para el Reporte.
        

        private void f_Reporte(bool tbPrimeraEntrada)
        {
            // Obtener Parametros

            DateTime? fechaAdquisiciond = null;
            DateTime? fechaAdquisicionh = null;
            DateTime fecha;
            if (DateTime.TryParse(this.txtFechaAdquisiciond.Text, out fecha)) fechaAdquisiciond = fecha;
            if (DateTime.TryParse(this.txtFechaAdquisicionh.Text, out fecha)) fechaAdquisicionh = fecha;
            string lslocalidad = txtLocalidad.Text.TrimEnd();
            string lsclase = txtClase.Text.TrimEnd();
            string lstipobien = txtTipoBien.Text.TrimEnd();
            string lsestado = txtEstado.Text.TrimEnd();
            


            //Crear Datasets que usa el Reporte
            ReportHelper.RepDataSet<string> tblReporte = new ReportHelper.RepDataSet<string>("Reporte", "repNombre");
            //"BienInformaticoId,cubf,sanf,sena,dfva,diga,dfga,Estado_cnom,TipoBien_cnom,SociedadId,cper,empleados,Marca_cnom,cmod,ClaseObjeto_cnom,localidad_nombre,ceco_descripcion");

            tblReporte.Rows.Add(new object[] { "Reporte de Bienes Informáticos" });
            // Llenar Datasets con Datos desde el Contexto o Contextos.


            using (SIBIContext db = new SIBIContext())
            using (TEJECUTIVOContext dbt = new TEJECUTIVOContext())
            {
                var bienes = db.BienInformaticoes;

                var buscar = (from tbien in db.BienInformaticoes
                              where (
                                (String.IsNullOrEmpty(lsclase) || tbien.nmym.ncob.cnom.Contains(lsclase)) &&
                                (String.IsNullOrEmpty(lstipobien) || tbien.ntib.cnom.Contains(lstipobien)) &&
                                (String.IsNullOrEmpty(lsestado) || tbien.nest.cnom.Contains(lsestado)) &&
                                (String.IsNullOrEmpty(lslocalidad) || tbien.nloc.localidad_nombre.Contains(lslocalidad)) &&
                                ((fechaAdquisiciond == null) ||
                                    ((fechaAdquisicionh == null) && (tbien.dfva == fechaAdquisiciond)) ||
                                    ((tbien.dfva >= fechaAdquisiciond) && (tbien.dfva <= fechaAdquisicionh))
                                )
                              )
                              select new
                              {
                                  BienInformaticoId = tbien.BienInformaticoId,
                                  cubf = tbien.cubf,
                                  sanf = tbien.nanf,
                                  sena = tbien.nena,
                                  dfva = tbien.dfva,
                                  diga = tbien.diga,
                                  dfga = tbien.dfga,
                                  Estado_cnom = tbien.nest.cnom,
                                  TipoBien_cnom = tbien.ntib.cnom,
                                  Sociedad = (tbien.nsoc == null) ? "0000" : tbien.nsoc.cscc,
                                  cper = (tbien.ndiv == null) ? "" : tbien.ndiv.cper,
                                  empleados = (tbien.ncar == null) ? "" : tbien.ncar.empleados,
                                  Marca_cnom = tbien.nmym.nmar.cnom,
                                  cmod = tbien.nmym.cmod,
                                  ClaseObjeto_cnom = tbien.nmym.ncob.cnom,
                                  localidad_nombre = tbien.nloc.localidad_nombre,
                                  ceco_descripcion = tbien.ncec.ceco_descripcion,
                                  ceco_id = tbien.ncec.ceco_id
                              });
                //DateTime tiempo1 = DateTime.Now;


                //DateTime tiempo2 = DateTime.Now;
                //TimeSpan total = new TimeSpan(tiempo2.Ticks - tiempo1.Ticks);
                //txtEstado.Text = "T:" + total.ToString();

                ReportViewer1.Reset();
                // Cargar el Reporte en pantalla, con sus parametros.
                ReportHelper.SetReportData(ReportViewer1, "/REP/REP_ConsultaBI.rdl", "Reporte,BienesInformaticos", 
                    new object[] { tblReporte, buscar.ToList() }
                    , "repNombre", "Reporte de Bienes Informáticos");
            }

        }// f_Reporte()

        


        /// <summary>
        /// 
        /// </summary>
        /// <param name="ctx"></param>
        /// <param name="tcid"></param>
        /// <returns></returns>
        private string GetLocalidad(TEJECUTIVOContext ctx, string tcid )
        {
            LOCALIDAD localidad =  ctx.LOCALIDAD.Where(s => s.localidad_id.Equals(tcid == null ? "" : tcid)).FirstOrDefault<LOCALIDAD>();
            return (localidad!=null)?localidad.localidad_nombre:"no tiene";
        }
        private string GetCeco(TEJECUTIVOContext ctx, string tcid)
        {
            CECO ceco = ctx.CECO.Where(s => s.ceco_id.Equals(tcid==null?"":tcid)).FirstOrDefault<CECO>();
            return (ceco!=null)?ceco.ceco_descripcion:"no tiene";
        }
    }
}
